Android 开启悬浮窗

石朝辉2015-10-21 16:40AndroidAndroid WindowManager 悬浮窗

转载请注明出处,点击此处open in new window 查看更多精彩内容

开启全局的悬浮窗(即覆盖在所有 Activity 上的悬浮窗)需要使用 ApplicationWindow ,即使用 Application Context获取 WindowManager

WindowManager manager = (WindowManager) applicationContext.getSystemService(WINDOW_SERVICE);

如果使用 Activity Context 获取 WindowManager,则悬浮窗只能显示在当前 Activity

WindowManager manager = (WindowManager) activityContext.getSystemService(WINDOW_SERVICE);

申请权限方式开启悬浮窗:

WindowManager manager = (WindowManager) context.getSystemService(WINDOW_SERVICE);
TextView textView = new TextView(MainActivity.this);
textView.setText("悬浮窗测试");
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
        PixelFormat.TRANSLUCENT
                | WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW);
manager.addView(textView, lp);

添加权限:

<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />

不需权限开启悬浮窗

将上面代码中的 WindowManager.LayoutParams.TYPE_SYSTEM_ALERT 改成 WindowManager.LayoutParams.TYPE_TOAST 即可。

WindowManager manager = (WindowManager) context.getSystemService(WINDOW_SERVICE);
TextView textView = new TextView(MainActivity.this);
textView.setText("悬浮窗测试");
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
        ViewGroup.LayoutParams.WRAP_CONTENT,
        ViewGroup.LayoutParams.WRAP_CONTENT,
        WindowManager.LayoutParams.TYPE_TOAST,
        WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
                | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE
                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
        PixelFormat.TRANSLUCENT
                | WindowManager.LayoutParams.FIRST_SYSTEM_WINDOW);
manager.addView(textView, lp);
最后更新于 2024-02-04 02:20:03